package com;

/*
 * @(#)SimpleRead.java	1.12 98/06/25 SMI
 *
 * Copyright 2003 Sun Microsystems, Inc. All rights reserved.
 * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 *
 * Sun grants you ("Licensee") a non-exclusive, royalty free, license
 * to use, modify and redistribute this software in source and binary
 * code form, provided that i) this copyright notice and license appear
 * on all copies of the software; and ii) Licensee does not utilize the
 * software in a manner which is disparaging to Sun.
 *
 * This software is provided "AS IS," without a warranty of any kind.
 * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
 * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
 * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND
 * ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY
 * LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE
 * SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS
 * BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
 * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES,
 * HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING
 * OUT OF THE USE OF OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
 *
 * This software is not designed or intended for use in on-line control
 * of aircraft, air traffic, aircraft navigation or aircraft
 * communications; or in the design, construction, operation or
 * maintenance of any nuclear facility. Licensee represents and
 * warrants that it will not use or redistribute the Software for such
 * purposes.
 */
import java.io.*;
import java.util.*;
import javax.comm.*;

/**
 * Class declaration
 *
 *
 * @author
 * @version 1.8, 08/03/00
 */
public class SimpleRead implements Runnable, SerialPortEventListener {
    static CommPortIdentifier portId;
    static Enumeration	      portList;
    InputStream		      inputStream;
    SerialPort		      serialPort;
    Thread		      readThread;
    static String port;

    /**
     * Method declaration
     *
     *
     * @param args
     *
     * @see
     */
    public static void go(String portArg) {
            boolean  portFound = false;
            String	defaultPort = portArg;
            port=portArg;


	portList = CommPortIdentifier.getPortIdentifiers();

	while (portList.hasMoreElements()) {
	    portId = (CommPortIdentifier) portList.nextElement();
	    if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
		if (portId.getName().equals(defaultPort)) {
		    System.out.println("Found port: "+defaultPort);
		    portFound = true;
		    SimpleRead reader = new SimpleRead();
		}
	    }
	}
	if (!portFound) {
	    System.out.println("port " + defaultPort + " not found.");
	}

    }

    /**
     * Constructor declaration
     *
     *
     * @see
     */
    public SimpleRead() {
	try {
	    serialPort = (SerialPort) portId.open("SimpleReadApp", 2000);
	} catch (PortInUseException e) {}



	try {
	    inputStream = serialPort.getInputStream();
	} catch (IOException e) {}




	try {
	    serialPort.addEventListener(this);
	} catch (TooManyListenersException e) {}




	serialPort.notifyOnDataAvailable(true);



	try {

            serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);
	    serialPort.setSerialPortParams(38400,
                                           SerialPort.DATABITS_8,
					   SerialPort.STOPBITS_1,
					   SerialPort.PARITY_NONE);

	} catch (UnsupportedCommOperationException e) {}


        

	readThread = new Thread(this);

	readThread.start();
    }

    /**
     * Method declaration
     *
     *
     * @see
     */
    public void run() {
	try {
	    Thread.sleep(2000);
	} catch (InterruptedException e) {}
    }

    /**
     * Method declaration
     *
     *
     * @param event
     *
     * @see
     */
    public void serialEvent(SerialPortEvent event) {
	switch (event.getEventType()) {

	case SerialPortEvent.BI:

	case SerialPortEvent.OE:

	case SerialPortEvent.FE:

	case SerialPortEvent.PE:

	case SerialPortEvent.CD:

	case SerialPortEvent.CTS:

	case SerialPortEvent.DSR:

	case SerialPortEvent.RI:

	case SerialPortEvent.OUTPUT_BUFFER_EMPTY:

	    break;

	case SerialPortEvent.DATA_AVAILABLE:
	    StringBuffer readBuffer = new StringBuffer();
            //Vector bytes;

	    try {

		while (inputStream.available() > 0) {

		    readBuffer.append((char)inputStream.read());

		}
                ////////////////////////////////////////////////////////////////
                ///  FACEBOOK

                if(readBuffer.toString().startsWith("packet")){
                    String[] packet = readBuffer.toString().trim().split(" ");
                    System.out.println(packet.length);
                    if(packet[1].equals("2")){

                             String message = generateMessage(packet[2]);
                    

                    // GUI.jTextArea1.setText("BUHAHAHA\n");
                    FacebookInterface sync = new FacebookInterface("http://127.0.0.1/");
                    sync.postToWall("100001661103140", "100001661103140", message);
                    GUI.log = GUI.log + "Synchronised with Facebook(TM)\n";

                    SimpleWrite.Write(port, "Success");
                    }
                }
                
                ///
                ////////////////////////////////////////////////////////////////


                GUI.log = GUI.log + readBuffer.toString();
		GUI.jTextArea1.setText(GUI.log);
                GUI.jTextArea1.setCaretPosition(GUI.jTextArea1.getDocument().getLength());
                //System.out.println("");
	    } catch (IOException e) {}

	    break;
	}
    }

    public String generateMessage(String integer){
    int i = Integer.parseInt(integer);
    String message;
    switch(i)
        {
        case 0: {
            message = "Displaying ALL colours";
            break;
        }
        case 1: {
            message = "My colours are Blue and Green";
            break;
        }
        case 2: {
            message = "My colours are Green and Red";
            break;
        }
        case 3: {
            message = "My colour is Green";
            break;
        }
        case 4: {
            message = "My colours are Blue and Red";
            break;
        }
        case 5: {
            message = "My colour is Blue";
            break;
        }
        case 6: {
            message = "My colour is Red";
            break;
        }
        case 7: {
            message = "I'm blind!";
            break;
        }
        default:{
        message = "ERROR!";
        break;}

    }
    return message;

    }

}




